package com.bedpotato.socket.echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Handler implements Runnable {
	private Socket socket = null;

	public Handler(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		try {
			System.out.println("New connection accepted "
					+ socket.getInetAddress() + ":" + socket.getPort());
			BufferedReader br = getReader(socket);
			PrintWriter pw = this.getWriter(socket);
			String msg = null;
			while ((msg = br.readLine()) != null) {
				System.out.println("server received: " + msg);
				pw.println(echo(msg));
				if (msg.equalsIgnoreCase("bye"))
					break;
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (socket != null)
					socket.close();
				System.out.println("connection close..");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public String echo(String msg) {

		return "echo:--->" + msg;
	}

	private PrintWriter getWriter(Socket socket) throws IOException {
		OutputStream socketOut = socket.getOutputStream();
		return new PrintWriter(socketOut, true);
	}

	private BufferedReader getReader(Socket socket) throws IOException {
		InputStream socketIn = socket.getInputStream();
		return new BufferedReader(new InputStreamReader(socketIn));
	}

}